<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			/*
			通过加不加new来判断是不是构造函数
			
			
			创建一个构造函数，专门用来创建Person对象的
			构造函数就是一个普通的函数，创建方式和普通函数没有区别
			不同的是构造函数首字母大写
			
			构造函数和普通函数的区别就是调用方式的不同
			普通函数是直接调用，构造函数需要使用new关键字来调用
			
			构造函数执行流程
			
			除了第三部是我们自己写的，其他的都是浏览器所返回的
			
			1、调用构造函数的时候，立刻创建一个新的对象
			2、将新建的对象设置为函数中的this
				在构造函数中可以使用this来引用新建的对象
			
			3、逐行执行函数中的代码
			4、将新建的对象作为返回值返回
			
			
			使用同一个构造函数创建的对象，我们称为一类对象
			也将一个构造函数称为一个类，
				我们也将一个构造函数创建的对象，称为该类的实例
				
			this的情况
				1、当以函数的形式调用时，this时window
				2、当以方法的形式调用时，谁调用的方法this就是谁
				3、当以构造函数的形式调用时，this就是创建的那个对象
			*/
			function Person(name,age,gender){
				this.name = name;
				this.age = age;
				this.gender = gender;
				this.sayName = function(){
					alert(this.name);
				};
			}
			function Dog(){
				
			}
			
			
			var dog = new Dog();
			
			var per = new Person("adaw",165,"dawd");
			console.log(per);
			var per2 = new Person("daw",15,"wad");
			console.log(per2);
			var per3 = new Person("djgaw",145,"w4ad");
			console.log(per3);
			var per4 = new Person();
			
			/*
			构造函数就是类，通过构造函数创建的对象就是实例（per）
			使用instanceof可以检查一个对象是否是一个类的实例
			语法：
				对象 instanceof 构造函数
				是就返回true
			*/
			
			//console.log(dog instanceof Person);
			//console.log(per instanceof Person);
			
			/*
			
			所有的对象都是Objedt的后代
				所有对象instanceof Object都会返回true
			*/
			console.log(dog instanceof Object);
		</script>
	</body>
</html>
